home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / comm / fido / fz104.lha / rexx / BBS2Fz.rexx next >
OS/2 REXX Batch file  |  1991-12-29  |  3KB  |  124 lines

  1. /*
  2.  *
  3.  *        Areas.BBS to Foozle.areas Converter
  4.  *
  5.  *        Written 1991 by Peer Hasselmeyer
  6.  *
  7.  *
  8.  *        Usage: rx BBS2Fz <in> <out> <fqfa> <pointnet>
  9.  *        where:
  10.  *           in       - your Areas.BBS file including path
  11.  *           out      - name of created Foozle-areas file, probably
  12.  *                  Foozle.areas
  13.  *           fqfa     - your fully qualified fidonet address, at least
  14.  *                  zone:net/node; point may be omitted
  15.  *           pointnet - your pointnet, used for remapping fake point
  16.  *                  addresses in the areas.bbs file to their real
  17.  *                  4d addresses; if you don't want to remap them
  18.  *                  (REALLY? WHY?), use 0 here
  19.  *
  20.  */
  21.  
  22. dupsize = 1        /* DupeTableSize: 0=0; 1=200; 2=500; 3=1000 */
  23.  
  24. parse arg infile " " outfile " " fqfa " " pointnet
  25.  
  26. parse var fqfa zone ":" net "/" node "." point 
  27. if point = "" then point = 0
  28.  
  29. if pointnet = "" then do
  30.     say "Usage: BBS2Fz <infile> <outfile> <fqfa> <pointnet>"
  31.     exit 10
  32.     end
  33.  
  34. if ~open(in, infile, R) then do
  35.     say "Couldn't open" infile "!"
  36.     exit 10
  37.     end
  38.  
  39. if ~open(out, outfile, W) then do
  40.     say "Couldn't open" outfile "!"
  41.     call close in
  42.     exit 20
  43.     end
  44.  
  45. first = 0
  46. do while ~eof(in)
  47.     temp = strip(readln(in), L, "     ")    /* remove leading white-spaces */
  48.     if temp ~= "" then do
  49.     if index(";-", left(temp, 1)) = 0 then    /* ignore ";" and "-" */
  50.         if first = 0 then first = 1
  51.         else if CreateArea(temp) ~= 0 then exit 20
  52.     end
  53.     end
  54.  
  55. call writech out, copies("00"x, 6)
  56.  
  57. call close out
  58. call close in
  59. exit
  60.  
  61. CreateArea:
  62. procedure expose out zone net node point pointnet DupSize
  63.     parse arg AreaLine
  64.  
  65.     parse var AreaLine dir tag dest
  66.     dir = strip(dir, "b", "     ")
  67.     tag = strip(tag, "b", "     ")
  68.     dest = strip(dest, "b", "     ")
  69.  
  70.     say "Creating area" Tag
  71.  
  72.     area = copies("00"x, 728)         /* Area-Structure */
  73.     area = overlay(tag, area)         /* your_name */
  74.     area = overlay(upper(tag), area, 25) /* net_name */
  75.     area = overlay(dir, area, 49)     /* directory */
  76.     area = overlay("01"x, area, 204)     /* # of reply-text */
  77.     area = overlay(d2c(DupSize), area, 201)    /* DupeTableSize */
  78.  
  79.     z = zone
  80.     n = net
  81.     f = node
  82.     p = point
  83.     counter = 209
  84.  
  85.     do while dest ~= ""
  86.     parse var dest addr dest
  87.     addr = strip(addr, "b", "     ")
  88.     if addr ~= "" then do
  89.         select
  90.         when index(addr, ":") > 0 then parse var addr z ":" n "/" f "." p
  91.         when index(addr, "/") > 0 then parse var addr n "/" f "." p
  92.         when left(addr, 1) = "." then parse var addr "." p
  93.         otherwise parse var addr f "." p
  94.         end
  95.         if p = "" then p = 0
  96.         remap = 0
  97.         if n = pointnet then do
  98.         p = f
  99.         n = net            /* remap fake points */
  100.         f = node
  101.         remap = 1
  102.         end
  103.         sysstr = right("00"x || d2c(z), 2) || right("00"x || d2c(n), 2)
  104.         sysstr = sysstr || right("00"x || d2c(f), 2)
  105.         sysstr = sysstr || right("00"x || d2c(p), 2)
  106.         area = overlay(sysstr, area, counter)
  107.         counter = counter + 8
  108.         if remap = 1 then do
  109.         n = pointnet
  110.         f = p
  111.         p = 0
  112.         end
  113.         end
  114.     end
  115.  
  116.     okay = 0
  117.     if writech(out, area) ~= 728 then do
  118.     say "** DISK ERROR !"
  119.     okay = 1
  120.     end
  121.  
  122. return okay
  123.  
  124.